草庐IT

c++ tcp多线程

全部标签

java - 如何通知另一个线程

我想知道如何通知另一个线程的最佳方式。比如我有一个后台线程:publicvoidStartBackgroundThread(){newThread(newRunnable(){@Overridepublicvoidrun(){//Dosomethingbig...//THENHOWTONOTIFYMAINTHREAD?}}).start();}当它完成时必须通知主线程?如果有人知道如何做到这一点的最佳方式,我将不胜感激! 最佳答案 典型的答案是BlockingQueue。BackgroundThread(通常称为Producer)和

java - 线程内线程的优先级

假设您有一个启动两个线程a和b的程序,并且b启动了另外十个线程。a获得了一半的可用“注意力”,而b及其线程共享另一半,还是它们均等?如果默认答案是后者,你怎么能实现前者呢?谢谢! 最佳答案 关于这个主题有很多不错的文档。其中之一是this.创建Java线程时,它会从创建它的线程继承其优先级。您还可以在线程创建后随时使用setPriority()修改线程的优先级。方法。线程优先级是介于MIN_PRIORITY之间的整数。和MAX_PRIORITY(Thread类中定义的常量)。整数越大,优先级越高。在任何给定时间,当多个线程准备好执行

java - 有没有办法让线程知道哪个线程中断了它?

有没有办法让线程知道哪个线程中断了它?例如:...if(isInterrupted()){//look-upthethreadthatinterruptedthis//actaccordingly}Thread没有显示任何内容。//========================编辑:这不是我正在寻找的消息或事件机制。但是,这看起来很原始。一种获取类类型、线程组或可能只是中断优先级的方法线程会携带一些信息来处理。典型的用途是系统关闭——打断它们让它们脱离它们的状态阻塞方法,我现在想不出其他方法了。 最佳答案 Isthereawayf

java - 如何保持线程执行直到异步线程返回回调

我的场景如下图所示这里的主线程是我的java应用程序。它打开一个WM线程来执行。WM处理任务执行。他需要调用任务号来执行。假设它包含任务T1,T2,T3T3依赖于T2,T2依赖于T1。WM首先调用RM执行T1的任务执行。T1可以在寻呼中响应,也可以在T1完成后响应。问题是如何等待T1完成然后开始T2的执行。当T1部分完成发送分页数据时如何通知WM。这是简单的场景,但在T1、T2、T3、T4的情况下。T3依赖于T1和T2。代码:publicclassTestAsyncimplementsTaskCallBack{publicstaticExecutorServiceexService=E

java - 使用 10 个线程处理一个数组

我正在努力提高我的Java技能,但有点不确定如何处理这个多线程应用程序。基本上,该程序读取一个文本文件并找到最大的数字。我在我的搜索算法中添加了一个for循环来创建10个线程,但我不确定它是否真的创建了10个线程。这个想法是为了缩短执行时间,或者至少这是我认为应该发生的事情。有没有办法检查我是否做对了以及执行时间是否确实有所改善?importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;publicclassProcessDataFile{publicstaticvoidmain(St

java - 将列表迭代器传递给 Java 中的多个线程

我有一个包含大约20万个元素的列表。我是否可以将此列表的迭代器传递给多个线程并让它们遍历整个批处理,而不需要它们中的任何一个访问相同的元素?这就是我此刻的想法。主要内容:publicstaticvoidmain(String[]args){//Imaginethislisthasthe200,000elements.ArrayListlist=newArrayList();//Gettheiteratorforthelist.Iteratori=list.iterator();//CreateMyThread,passingintheiteratorforthelist.MyThrea

java - 如何在 CompletableFuture.supplyAsync(Supplier<U> supplier) 方法中使用所需数量的工作线程设置 ForkJoinPool?

根据甲骨文,staticCompletableFuturesupplyAsync(Suppliersupplier)ReturnsanewCompletableFuturethatisasynchronouslycompletedbyataskrunningintheForkJoinPool.commonPool()withthevalueobtainedbycallingthegivenSupplier.staticCompletableFuturesupplyAsync(Suppliersupplier,Executorexecutor)ReturnsanewCompletable

java - java.io.PrintStream 上的线程争用

我正在使用JavaMissionControl分析我的应用程序的性能问题。JMC在线程争用和锁定实例部分下突出显示了java.io.PrintStream。为什么我会遇到JDK包的线程争用问题? 最佳答案 看起来您的应用程序正在从多个线程同时向stdout或stderr生成大量输出(System.out和System.err是PrintStreams)。PrintStream上的写入和刷新无法并行处理,它们都是同步的,因此您面临争用。 关于java-java.io.PrintStream

java - 从 Java 内存模型的角度理解为什么在构造函数中启动线程是不安全的

这个问题在这里已经有了答案:Whyshouldn'tIuseThread.start()intheconstructorofmyclass?(2个答案)关闭3年前。根据JavaConcurrencyinPractice,在类构造函数中启动线程是危险的。原因是在对象完全构造之前,this将this指针暴露给另一个线程。尽管这个话题在之前的许多StackOverflow问题中都有讨论,但我仍然难以理解为什么这是一个如此令人担忧的问题。特别是,我希望从Java内存模型的角度澄清在构造函数内启动线程是否会导致内存一致性问题。让我举一个具体的例子来说明我想做的事情。(这段代码的期望输出是将数字2

java - Java MulticastSocket 是线程安全的吗?

我有两个线程。第一个在循环中发送带有MulticastSocket的数据报;第二个线程在循环中使用相同的MulticastSocket实例接收数据报。它似乎工作正常,但我仍然有疑问。这两个线程可以使用同一个MulticastSocket实例吗?MulticastSocket在发送/接收方法调用方面是线程安全的吗? 最佳答案 发送和接收DatagramSocket方法都在发送/接收数据报包上同步。换句话说,如果您使用相同的数据报包从两个不同的线程发送和接收,这两个方法将同步,因为它们将使用相同的对象作为同步token。看了Datagr